package test_1;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;

public class drinkHelper2 {
    private static int countdownTime = 30; // 倒计时初始时间为30秒

    public static void main(String[] args) {
        // 获取当前时间并计算下一个整点或半点时间
        scheduleNextReminder();

        // 为了保持主线程持续存活，这里给一个死循环
        while (true) {
            try {
                Thread.sleep(100000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }

    // 计算下一个整点或半点的时间并启动定时器
    public static void scheduleNextReminder() {
        // 获取当前时间
        Calendar now = Calendar.getInstance();

        // 计算下一次提醒的时间，确保是整点或者半点
        int minutes = now.get(Calendar.MINUTE);
        int nextReminderMinutes = 0;

        // 如果当前分钟大于30，则下一个提醒时间是下一个小时的0分钟，否则是当前小时的30分钟
        if (minutes >= 30) {
            now.add(Calendar.HOUR_OF_DAY, 1); // 加1小时
            nextReminderMinutes = 0; // 下一个小时的整点
        } else {
            nextReminderMinutes = 30; // 当前小时的30分钟
        }

        // 设置定时器在指定的时间触发
        now.set(Calendar.MINUTE, nextReminderMinutes);
        now.set(Calendar.SECOND, 0);
        now.set(Calendar.MILLISECOND, 0);

        // 获取下次提醒的延迟时间（毫秒）
        long delay = now.getTimeInMillis() - System.currentTimeMillis();

        // 如果delay是负数，说明下一个提醒已经是明天了，需要再加24小时
        // 00:00 - 23:30 + 24:00 = (下一天)00:30
        if (delay < 0) {
            delay += 24 * 60 * 60 * 1000; // 加24小时
        }

        ActionListener actionListener = new ActionListener() {
            @Override
            public void actionPerformed(java.awt.event.ActionEvent e) {
                showBreakReminder();
                // 设置下一次提醒
                scheduleNextReminder();
            }
        };
        // 使用定时器延迟到下一次提醒时间
        new Timer((int) delay, actionListener).start();
    }

    // 显示休息提醒的全屏弹窗，并添加30秒倒计时
    public static void showBreakReminder() {
        // 创建一个全屏的JFrame
        JFrame frame = new JFrame("休息提醒");

        // 设置全屏模式
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frame.setUndecorated(true); // 去掉窗口装饰（标题栏和边框）

        // 加载背景图片
        String imagePath = "C:/Users/allwe/Pictures/infinity-210207.jpg"; // 替换为你自己的图片路径
        ImageIcon backgroundImage = new ImageIcon(imagePath);
        JLabel backgroundLabel = new JLabel(backgroundImage);
        frame.setContentPane(backgroundLabel); // 将背景设置为窗口的内容面板

        // 创建一个标签显示提示信息
        JLabel label = new JLabel("休息一会吧", SwingConstants.CENTER);
        label.setFont(new Font("Serif", Font.BOLD, 100)); // 放大字号
        label.setForeground(new Color(0, 255, 255)); // 设置字体颜色为青色

        // 创建倒计时标签
        JLabel countdownLabel = new JLabel(countdownTime + "秒", SwingConstants.CENTER);
        countdownLabel.setFont(new Font("Serif", Font.BOLD, 100)); // 倒计时与提示语字号一致
        countdownLabel.setForeground(new Color(0, 255, 255)); // 倒计时颜色与提示语一致

        // 设置布局管理器为 null，这样我们可以精确控制位置
        frame.setLayout(null);

        // 计算屏幕中央位置
        int labelWidth = label.getPreferredSize().width;
        int labelHeight = label.getPreferredSize().height;
        int frameWidth = frame.getWidth();
        int frameHeight = frame.getHeight();

        // 设置提示语标签的位置，位于屏幕上半部分的中央
        label.setBounds((frameWidth - labelWidth) / 2, frameHeight / 4 - labelHeight / 2, labelWidth, labelHeight);

        // 设置倒计时标签的位置，位于屏幕下半部分的中央
        countdownLabel.setBounds((frameWidth - labelWidth) / 2, 3 * frameHeight / 4 - labelHeight / 2, labelWidth, labelHeight);

        // 将标签添加到窗口
        frame.add(label);
        frame.add(countdownLabel);

        // 设置关闭事件
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 放到最上层
        frame.setAlwaysOnTop(true);
        // 设置可见
        frame.setVisible(true);

        // 设置倒计时的计时器
        ActionListener actionListener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                countdownTime--; // 倒计时每秒减少1

                // 更新倒计时标签
                countdownLabel.setText(countdownTime + "秒");

                // 如果倒计时到达0，关闭窗口
                if (countdownTime <= 0) {
                    frame.dispose();  // 关闭窗口
                }
            }
        };

        new Timer(1000, actionListener).start();
    }
}
